﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using CapaEntidades;

namespace CapaDatos
{
    public class daUsuario
    {
        #region singleton
        private static readonly daUsuario _instancia = new daUsuario();
        public static daUsuario Instancia
        {
            get { return daUsuario._instancia; }
        }
        #endregion

        #region Métodos
        public static enUsuario usuarioLogin(enUsuario prmUsuario)
        {
            SqlConnection cn = null;
            SqlCommand cmd = null;
            SqlDataReader dr = null;
            enUsuario usuario = null;
            try
            {

                cn = Conexion.getConexion();
                cmd = new SqlCommand("spUsuarioLogin", cn);
                cmd.Parameters.AddWithValue("@usu_user", prmUsuario.usu_user);
                cmd.Parameters.AddWithValue("@usu_pass", prmUsuario.usu_pass);
                cmd.CommandType = CommandType.StoredProcedure;
                cn.Open();
                dr = cmd.ExecuteReader();
                if (dr.Read())
                {
                    usuario = new enUsuario();                                     
                            enPersonal personal = new enPersonal();
                            personal.per_id = Convert.ToInt32(dr[0].ToString());
                            personal.per_nombres = dr[1].ToString();
                            personal.per_apellidos = dr[2].ToString();
                            usuario.personal = personal;
                    usuario.usu_id = Convert.ToInt32(dr[3].ToString());
                    usuario.usu_user = dr[4].ToString();
                        enCargo cargo = new enCargo();
                        cargo.car_id = Convert.ToInt32(dr[5].ToString());
                        cargo.car_descripcion = dr["car_descripcion"].ToString();
                    usuario.cargo = cargo;
                }
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                dr.Close();
                cn.Close();
            }
            return usuario;

        }

        public enAlerta spRecepcionarCargoXML(String xml)
        {
            SqlConnection cn = null;
            SqlCommand cmd = null;
            SqlDataReader dr = null;
            enAlerta lstProducto = new enAlerta();
            try
            {

                cn = Conexion.getConexion();
                cmd = new SqlCommand("spRecepcionarCargoXML", cn);
                cmd.Parameters.AddWithValue("@prmXML", xml);
                cmd.CommandType = CommandType.StoredProcedure;
                cn.Open();
                dr = cmd.ExecuteReader();
                lstProducto.val = -1;
                if (dr.Read())
                {

                    lstProducto.val = Convert.ToInt16(dr[0].ToString());
                    lstProducto.msg = dr[1].ToString();

                }
            }
            catch (Exception)
            {
                lstProducto.val = -1;
                throw;
            }
            finally
            {
                dr.Close();
                cn.Close();
            }
            return lstProducto;

        }

        public enAlerta spRecepcionarPersonalXML(String xml)
        {
            SqlConnection cn = null;
            SqlCommand cmd = null;
            SqlDataReader dr = null;
            enAlerta lstProducto = new enAlerta();
            try
            {

                cn = Conexion.getConexion();
                cmd = new SqlCommand("spRecepcionarPersonalXML", cn);
                cmd.Parameters.AddWithValue("@prmXML", xml);
                cmd.CommandType = CommandType.StoredProcedure;
                cn.Open();
                dr = cmd.ExecuteReader();
                lstProducto.val = -1;
                if (dr.Read())
                {

                    lstProducto.val = Convert.ToInt16(dr[0].ToString());
                    lstProducto.msg = dr[1].ToString();

                }
            }
            catch (Exception)
            {
                lstProducto.val = -1;
                throw;
            }
            finally
            {
                dr.Close();
                cn.Close();
            }
            return lstProducto;

        }

        public List<enPersonal> listaAutorizadores()
        {
            SqlConnection cn = null;
            SqlCommand cmd = null;
            SqlDataReader dr = null;
            List<enPersonal> lstModPago = null;
            try
            {
                cn = Conexion.getConexion();
                cmd = new SqlCommand("select per_id,per_nombres,per_apellidos from PL_personal p inner join LO_cargo l on l.car_id=p.cargo_id where cargo_id=15", cn);
                cmd.CommandType = CommandType.Text;
                cn.Open();
                dr = cmd.ExecuteReader();
                lstModPago = new List<enPersonal>();
                while (dr.Read())
                {
                    enPersonal modPago = new enPersonal();
                    modPago.per_id = Convert.ToInt32(dr[0].ToString());
                    modPago.per_nombres = dr[1].ToString() + " " + dr[2].ToString();                   
                    lstModPago.Add(modPago);
                }
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                dr.Close();
                cn.Close();
            }
            return lstModPago;

        }
        #endregion
    }
}
